/*
 * Copyright (c) 2009-2011, Petr Panteleyev <petr@panteleyev.org>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 *
 *    1. Redistributions of source code must retain the above copyright notice,
 *       this list of conditions and the following disclaimer.
 *    2. Redistributions in binary form must reproduce the above copyright notice,
 *       this list of conditions and the following disclaimer in the documentation
 *       and/or other materials provided with the distribution.
 *    3. The name of the author may not be used to endorse or promote products
 *       derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

package org.panteleyev.music;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

/**
 *
 * @author Petr Panteleyev <petr@panteleyev.org>
 */
class ITunesWin implements IMusicPlayer {
    private static final String CURRENT_TRACK_SCRIPT =
        "var iTunesApp = WScript.CreateObject(\"iTunes.Application\");" +
        "if (iTunesApp == null) {" +
        "	WScript.echo(\"\");" +
        "} else {" +
        "   var track = iTunesApp.CurrentTrack;" +
        "   if (track == null) {" +
        "       WScript.echo(\"\");" +
        "   } else {" +
        "		WScript.echo(track.Album + \"\\t\" + track.Artist + \"\\t\" + track.TrackNumber + \"\\t\" + track.Name);" +
        "   }" +
        "}";

    @Override
    public MusicTrackInfo getCurrentTrack() {
        try {
            File scr = File.createTempFile("pblogger", ".js");
            try (PrintWriter w = new PrintWriter(scr)) {
                w.print(CURRENT_TRACK_SCRIPT);
            }
            String cmd = "cscript /U /NoLogo " + scr.getAbsolutePath();
            Process proc = Runtime.getRuntime().exec(cmd);
            BufferedReader input = new BufferedReader(new InputStreamReader(proc.getInputStream(), "utf-16le"));
            String result = input.readLine();
            if (result != null) {
                String[] parts = ((String)result).trim().split("\t");
                return (parts.length == 4)?
                    new MusicTrackInfo(parts[1], parts[0], parts[3], Integer.parseInt(parts[2])) : null;
            } else {
                return null;
            }
        } catch (IOException ignore) {
            return null;
        }
    }

}
